﻿using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace 凯旋归来管理端.models
{
    public class 技能信息
    {
public         int Id;
        public string 技能等级;
        public string 技能的职业;
        public string 技能类型;
        public string 技能英文名;
        public string 技能中文名;
        public string 技能备注;
        public string 未知;
        public int 辅助ID;
        public int 未知1;
        public int 未知2;
        public int 等级;
        public bool 辅助自己;
        public bool 滞留技能;
        public byte 攻击类型;
        public byte 步骤;
        public Int64[] V需求经验;
        public Dictionary<int, UInt16> 属性要求;
        public Dictionary<string, UInt16> 技能要求;
        public int[] V辅助时长;
        public int[] 攻击次数;
        public int[] 攻击速度;
        public int[] 冷却时间;
        public int[] V魔法消耗;
        public int[] 攻击距离;
        public int[] 攻击半径;
        public string 备注;
        public Dictionary<string, float>[] V基础属性;
        public static 技能信息[] 数据表转数组(DataTable dt)
        {
            技能信息[] ret = new 技能信息[dt.Rows.Count];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                ret[i] = new 技能信息();
                int.TryParse(dt.Rows[i]["id"].ToString(), out ret[i].Id);
                if (ret[i].Id == 0)
                {
                    continue;
                }
                ret[i].技能等级 = dt.Rows[i]["技能等级"].ToString();
                ret[i].技能的职业 = dt.Rows[i]["技能的职业"].ToString();
                ret[i].技能类型 = dt.Rows[i]["技能类型"].ToString();
                ret[i].技能英文名 = dt.Rows[i]["技能英文名"].ToString();
                ret[i].技能中文名 = dt.Rows[i]["技能中文名"].ToString();
                ret[i].技能备注 = dt.Rows[i]["技能备注"].ToString();
                ret[i].未知 = dt.Rows[i]["未知"].ToString();
                ret[i].备注= dt.Rows[i]["备注"].ToString();
                ret[i].V基础属性 = new Dictionary<string, float>[101];
                int.TryParse(dt.Rows[i]["辅助ID"].ToString(), out ret[i].辅助ID);
                int.TryParse(dt.Rows[i]["未知1"].ToString(), out ret[i].未知1);
                int.TryParse(dt.Rows[i]["未知2"].ToString(), out ret[i].未知2);
                int.TryParse(dt.Rows[i]["等级"].ToString(), out ret[i].等级);

                bool.TryParse(dt.Rows[i]["辅助自己"].ToString(), out ret[i].辅助自己);
                bool.TryParse(dt.Rows[i]["滞留技能"].ToString(), out ret[i].滞留技能);

                byte.TryParse(dt.Rows[i]["攻击类型"].ToString(), out ret[i].攻击类型);
                byte.TryParse(dt.Rows[i]["步骤"].ToString(), out ret[i].步骤);
                for(int 技能等级 = 1; 技能等级 <= 100; 技能等级++)
                {
                    object row = dt.Rows[i]["基础属性" + 技能等级.ToString()];
                    ret[i].V基础属性[技能等级] = new Dictionary<string, float>();
                    if (row != null)
                    {
                        string json = row.ToString();
                        if ((json != "null") && (json.Length != 0) )
                        {
                            if (json.Substring(0, 1) == ",")
                            {
                                json = json.Substring(1, json.Length - 1);
                            }
                            else
                            {
                                json = json.Substring(1, json.Length - 2);
                            }
                            string[] sp = json.Split(',');
                            for (int iii = 0; iii < sp.Length; iii++)
                            {
                                string[] sp1 = sp[iii].Split(':');
                                sp1[0] = sp1[0].Replace("\"", "");
                                float 值;
                                if (float.TryParse(sp1[1], out 值) == false)
                                {
                                    continue;
                                }
                                ret[i].V基础属性[技能等级][sp1[0]] = 值;
                            }
                        }
                    }
                    if (ret[i].V基础属性[技能等级].Count() == 0)
                    {
                        if (ret[i].V基础属性[技能等级 - 1] != null)
                        {
                            //throw new Exception("技能名称:" + ret[i].技能中文名 + "格式不正确:" + row.ToString());
                            foreach (var item in ret[i].V基础属性[技能等级 - 1])
                            {
                                ret[i].V基础属性[技能等级][item.Key] = item.Value;
                            }
                        }
                    }
                }
            }
            return ret;
        }
        public string 保存(string connstr)
        {
            StringBuilder sql = new StringBuilder();
            sql.Append("UPDATE 技能信息 SET 备注=@1,");
            for(int i = 1; i <= 100; i++)
            {
                if (i!=1)
                {
                    sql.Append(",");
                }
                sql .Append("基础属性" + i.ToString() + "=@" + (i+100).ToString()  );
            }
            sql.Append(" WHERE ID=" + this.Id.ToString());
            using (MySqlConnection conn = new MySqlConnection(connstr))
            {
                try
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand(sql.ToString(), conn);
                    cmd.Parameters.AddWithValue("@1", this.备注);
                    for (int i = 1; i <= 100; i++)
                    {
                        string JSON = "";
                        foreach (var item in this.V基础属性[i])
                        {
                            if (item.Value <= 1) continue;
                            if (JSON.Length != 0) JSON += ",";
                            JSON += "\"" + item.Key + "\":" + ((int)item.Value).ToString();
                        }
                        if (JSON.Length != 0)
                        {
                            JSON = "{" + JSON + "}";
                        }
                        cmd.Parameters.AddWithValue("@" + (i + 100).ToString(), JSON);
                    }
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    return ex.ToString(); ;
                }
                finally
                {
                    conn.Close();
                }
            }
            return "";
        }
       
    }
}
